using System;
using System.Collections.Generic;
using System.Text;

using System.Data.Common;

using MakeIT.Framework.Data;
using MakeIT.SGI.ERP.Entidades;

namespace MakeIT.SGI.ERP.Negocios
{
	public partial class SgiDAOT : DAOT
	{

		public LogradourotipoVO getLogradourotipo(int? idlogradouroTipo, string logradouroSigla)
		{
			LogradourotipoVO logradourotipoVO = null;
			List<LogradourotipoVO> listLogradourotipoVOs = getLogradourotipos(idlogradouroTipo, logradouroSigla, null);
			if (listLogradourotipoVOs != null && listLogradourotipoVOs.Count > 0)
			{
				logradourotipoVO = listLogradourotipoVOs[0];
			}
			return logradourotipoVO;
		}

		public LogradourotipoVO getLogradourotipo(int? idlogradouroTipo)
		{
			return getLogradourotipo(idlogradouroTipo, null);
		}

		public List<LogradourotipoVO> getLogradourotipos()
		{
			return getLogradourotipos(null, null, null);
		}

		public List<LogradourotipoVO> getLogradourotipos(int? idlogradouroTipo)
		{
			return getLogradourotipos(idlogradouroTipo, null, null);
		}

		public List<LogradourotipoVO> getLogradourotipos(int? idlogradouroTipo, string logradouroSigla, string logradouroTipo)
		{
			string where = "WHERE ";
			StringBuilder query = new StringBuilder();

			query.AppendLine("SELECT lgt.idlogradouroTipo as lgt_idlogradouroTipo, lgt.logradouroTipo as lgt_logradouroTipo, lgt.logradouroSigla as lgt_logradouroSigla, lgt.Cadastro as lgt_Cadastro, lgt.CadastradoPor as lgt_CadastradoPor, lgt.Edicao as lgt_Edicao, lgt.EditadoPor as lgt_EditadoPor  ");
			query.AppendLine("FROM logradourotipo as lgt ");
			if (idlogradouroTipo != null)
			{
				query.AppendLine(where + "lgt.idlogradouroTipo=@idlogradouroTipo ");
				where = "AND ";
			}
			if (logradouroTipo != null)
			{
				query.AppendLine(where + "lgt.logradouroTipo=@logradouroTipo ");
				where = "AND ";
			}
			if (logradouroSigla != null)
			{
				query.AppendLine(where + "lgt.logradouroSigla LIKE @logradouroSigla ");
				where = "AND ";
			}


			query.AppendLine("ORDER BY lgt.logradouroSigla ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			if (idlogradouroTipo!= null) cmd.Parameters.Add(getParameter(cmd, "@idlogradouroTipo", idlogradouroTipo));
			if (logradouroTipo!= null) cmd.Parameters.Add(getParameter(cmd, "@logradouroTipo", logradouroTipo));
			if (logradouroSigla!= null) cmd.Parameters.Add(getParameter(cmd, "@logradouroSigla", "%"+logradouroSigla+"%"));


			DbDataReader reader = null;
			try
			{
				reader = cmd.ExecuteReader();

				List<LogradourotipoVO> listLogradourotipo = new List<LogradourotipoVO>();

				while (reader.Read())
				{
					LogradourotipoVO logradourotipoVO = LogradourotipoVO.CreateVO();
					logradourotipoVO.idlogradouroTipo = reader.GetInt32(reader.GetOrdinal("lgt_idlogradouroTipo"));
					logradourotipoVO.logradouroTipo = reader.GetString(reader.GetOrdinal("lgt_logradouroTipo"));
					logradourotipoVO.logradouroSigla = reader.GetString(reader.GetOrdinal("lgt_logradouroSigla"));
					logradourotipoVO.cadastro = reader.GetDateTime(reader.GetOrdinal("lgt_Cadastro"));
					logradourotipoVO.cadastradoPor = reader.GetString(reader.GetOrdinal("lgt_CadastradoPor"));
					logradourotipoVO.edicao = reader.GetDateTime(reader.GetOrdinal("lgt_Edicao"));
					logradourotipoVO.editadoPor = reader.GetString(reader.GetOrdinal("lgt_EditadoPor"));


					listLogradourotipo.Add(logradourotipoVO);
				}
				reader.Close();
				return listLogradourotipo;
			}
			catch (Exception ex) { throw ex; }
			finally
			{
				if (reader != null && !reader.IsClosed)
					reader.Close();
			}
		}

		public void setLogradourotipo(LogradourotipoVO logradourotipoVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("UPDATE logradourotipo ");
			query.AppendLine("SET logradouroTipo=@logradouroTipo, logradouroSigla=@logradouroSigla,  Cadastro=@Cadastro, CadastradoPor=@CadastradoPor, Edicao=@Edicao, EditadoPor=@EditadoPor ");
			query.AppendLine("WHERE idlogradouroTipo=@idlogradouroTipo ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idlogradouroTipo", logradourotipoVO.idlogradouroTipo));
			cmd.Parameters.Add(getParameter(cmd, "@logradouroTipo", logradourotipoVO.logradouroTipo));
			cmd.Parameters.Add(getParameter(cmd, "@logradouroSigla", logradourotipoVO.logradouroSigla));
			cmd.Parameters.Add(getParameter(cmd, "@Cadastro", logradourotipoVO.cadastro));
			cmd.Parameters.Add(getParameter(cmd, "@CadastradoPor", logradourotipoVO.cadastradoPor));
			cmd.Parameters.Add(getParameter(cmd, "@Edicao", logradourotipoVO.edicao));
			cmd.Parameters.Add(getParameter(cmd, "@EditadoPor", logradourotipoVO.editadoPor));

			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }

		}

		public long newLogradourotipo(LogradourotipoVO logradourotipoVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("INSERT INTO logradourotipo ");
			query.AppendLine("  ( logradouroTipo, logradouroSigla, Cadastro, CadastradoPor, Edicao, EditadoPor ) ");
			query.AppendLine("VALUES ( @logradouroTipo, @logradouroSigla, @Cadastro, @CadastradoPor, @Edicao, @EditadoPor ) ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@logradouroTipo", logradourotipoVO.logradouroTipo));
			cmd.Parameters.Add(getParameter(cmd, "@logradouroSigla", logradourotipoVO.logradouroSigla));
			cmd.Parameters.Add(getParameter(cmd, "@Cadastro", logradourotipoVO.cadastro));
			cmd.Parameters.Add(getParameter(cmd, "@CadastradoPor", logradourotipoVO.cadastradoPor));
			cmd.Parameters.Add(getParameter(cmd, "@Edicao", logradourotipoVO.edicao));
			cmd.Parameters.Add(getParameter(cmd, "@EditadoPor", logradourotipoVO.editadoPor));


			try
			{
				cmd.ExecuteNonQuery();

				long newID = 0;
				if (tipo.Equals(DBType.MSSql))
				{
					cmd.CommandText = "SELECT IDENT_CURRENT('logradourotipo') AS 'Identity' ";
					DbDataReader reader = cmd.ExecuteReader();
					reader.Read();
					newID = (long)reader.GetDecimal(reader.GetOrdinal("Identity"));
					reader.Close();
				}
				else if (tipo.Equals(DBType.MySql))
				{
					newID = ((MySql.Data.MySqlClient.MySqlCommand)cmd).LastInsertedId;
				}
				else if (tipo.Equals(DBType.ODBC))
				{
					//TODO implementar
				}
				else if (tipo.Equals(DBType.ORACLE))
				{
					//TODO implementar
				}
				return newID;
			}
			catch (Exception ex) { throw ex; }

		}

		public void delLogradourotipo(LogradourotipoVO logradourotipoVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("DELETE FROM logradourotipo ");
			query.AppendLine("WHERE idlogradouroTipo=@idlogradouroTipo ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idlogradouroTipo", logradourotipoVO.idlogradouroTipo));


			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }

		}
	}
}
